import {isArray} from '@/utils/type'
import {getArgsName} from '@/utils/tools'

// 扁平化数组对象
export function flatArrayObject(array) {
  if (!isArray(array)) {
    console.error(`${getArgsName(flatArrayObject)[0]} is not an array type`)
    return
  }
  if (!array.length) return array
  return array.reduce((res, item) => {
    const {menu, ...i} = item
    return res.concat(i, menu && menu.length ? flatArrayObject(menu) : [])
  }, [])
}

// 数组对象去重, 第二个参数是根据对象中的那个key来去重
export function uniqueArrObject(array, key) {
  if (!isArray(array)) {
    console.error(`${getArgsName(flatArrayObject)[0]} is not an array type`)
    return
  }
  if (!array.length) return array
  if (!key) {
    console.error(`必须传入对象的一个key`)
    return
  }
  const res = new Map()
  return array.filter(item => !res.has(item[key]) && res.set(item[key], 1))
}

// 普通对象去重
export function uniqueArray(array) {
  if (!isArray(array)) {
    console.error(`${getArgsName(flatArrayObject)[0]} is not an array type`)
    return
  }
  if (!array.length) return array

  return Array.from(new Set(array))
}
